﻿//Реализация ECO-сервиса
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Eco.ObjectRepresentation;
using Descriptions_DomainModel.Model;

namespace Plugins.IntelliSense
{
    /// <summary>
    /// Сервис, предоставляющий по запросу редактор с IntelliSense
    /// </summary>
    public class IntelliSenseService : 
        EcoExtensions.Model.BaseEcoService, 
        CommonClasses.Services.IEditorWithIntelliSense
    {
        /// <summary>
        /// Описание оборудования. Источник ID для автодополнения
        /// </summary>
        private DomainModel domainModel = null;
        /// <summary>
        /// Ссылка на поставщик сервисов (обычно EcoSpace)
        /// </summary>
        private IEcoServiceProvider serviceProvider = null;

        /// <summary>
        /// Инициализация 
        /// </summary>
        /// <param name="serviceProvider">-</param>
        public IntelliSenseService(IEcoServiceProvider serviceProvider)
        {
            if (serviceProvider == null)
                throw new NullReferenceException("ServiceProvider cannot be null!");

            this.serviceProvider = serviceProvider;
        }

        /// <summary>
        /// Показать окно в модальном виде. В редакторе будет находиться указанный текст
        /// </summary>
        /// <param name="source">
        /// Текст, который будет находиться в редакторе
        /// </param>
        /// <param name="variables">
        /// Список имён переменных, они будут использованы для автодополнения
        /// </param>
        /// <param name="caption">
        /// Текст заголовка окна
        /// </param>
        /// <returns>
        /// Изменённый текст.
        /// <remarks>
        /// Если окно было закрыто по клавише "Отмена" или "Х",
        /// то текст будет соатвлен без изменений
        /// </remarks>
        /// </returns>
        public string Edit(string source, IList<string> variables, string caption)
        {
            var editor = new IntelliSenseTextEditorForm(serviceProvider);
            editor.Text = caption;

            return editor.ShowDialog(source, domainModel, variables);
        }

        /// <summary>
        /// Указать сервису источник возможных идентификаторов для автодополнения
        /// </summary>
        /// <param name="domainModel">
        /// Описание оборудования. Отсюда будут выбираться 
        /// идентификаторы для автозаполнения
        /// </param>
        public void Initialize(DomainModel domainModel)
        {
            this.domainModel = domainModel;
        }
    }
}
